package com.itbaizhan;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**ResultSet的使用  (想要SQL执行结果，去找ResultSet)*/
/*ResultSet接口的特点
* ResultSet用来存放数据库查询操作获得结果集，通过对ResultSet的操作可以获
* 取查询到的结果集数据。
* 注意：
ResultSet 对象中存放的并不是我们查询到的所有的结果集。它采用分块加载的
* 方式来载入结果集数据。（一次加载一定数量的结果集，指针向下一行才又加载一
* 次，因为，如果一次全部数据加载，程序内存会有内存益出的风险）*/
/*ResultSet 对象具有指向其当前数据行的指针。最初，指针被置于第一行之前。
next 方法将指针移动到下一行；因为该方法在 ResultSet 对象中没有下一行时
返回 false，所以可以在 while 循环中使用它来迭代结果集。

默认的 ResultSet 对象仅有一个向前移动的指针。因此，只能迭代它一次，
并且只能按从第一行到最后一行的顺序进行。

ResultSet 接口提供用于获取当前行检索列值的获取方法
（getBoolean、getLong 等）。可以使用列的索引位置或列的名称检索值。*/
public class ResultSetTest {
    /*查询所有用户*/
    public void selectUsersAll(){
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            //获取数据库连接对象
            connection = JdbcUtils.getConnection();
            //获取PreparedStatement对象，编译sql语句
            ps = connection.prepareStatement("select * from users");
            rs =ps.executeQuery();
            while (rs.next()){
                int userid = rs.getInt("userid");
                String username = rs.getString("username");
                int userage = rs.getInt("userage");
                System.out.println(userid+" "+username+" "+userage);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
           // 注意关闭顺序
            JdbcUtils.closeResource(rs,ps,connection);
        }
    }
}
